#!/bin/bash

# MCP-Link 统一部署脚本
# 解决构建路径不一致和配置错误问题

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查必要工具
check_prerequisites() {
    log_info "检查部署前置条件..."
    
    if ! command -v docker &> /dev/null; then
        log_error "Docker 未安装或不在 PATH 中"
        exit 1
    fi
    
    if ! command -v docker compose &> /dev/null; then
        log_error "Docker Compose 未安装或不在 PATH 中"
        exit 1
    fi
    
    if ! command -v npm &> /dev/null; then
        log_error "npm 未安装或不在 PATH 中"
        exit 1
    fi
    
    log_success "前置条件检查通过"
}

# 清理旧的构建文件
clean_build() {
    log_info "清理旧的构建文件..."
    
    if [ -d "frontend/dist" ]; then
        rm -rf frontend/dist
        log_info "已清理 frontend/dist"
    fi
    
    if [ -d "frontend/build" ]; then
        rm -rf frontend/build
        log_info "已清理 frontend/build"
    fi
    
    log_success "构建文件清理完成"
}

# 构建前端
build_frontend() {
    log_info "开始构建前端..."
    
    cd frontend
    
    # 安装依赖（如果需要）
    if [ ! -d "node_modules" ]; then
        log_info "安装前端依赖..."
        npm install
    fi
    
    # 构建项目
    log_info "构建 Vue 项目..."
    npm run build
    
    # 验证构建结果
    if [ ! -d "dist" ]; then
        log_error "前端构建失败：dist 目录不存在"
        exit 1
    fi
    
    if [ ! -f "dist/index.html" ]; then
        log_error "前端构建失败：index.html 不存在"
        exit 1
    fi
    
    # 检查是否包含最新代码
    if ! grep -r "查看日志" dist/ &> /dev/null; then
        log_error "前端构建失败：未包含最新的日志功能代码"
        exit 1
    fi
    
    cd ..
    log_success "前端构建完成并验证通过"
}

# 验证配置文件
validate_config() {
    log_info "验证 Docker Compose 配置..."
    
    # 检查 docker-compose.yml 中的路径配置
    if grep -q "./frontend/build:" docker-compose.yml; then
        log_error "Docker Compose 配置错误：仍在使用 build 目录"
        log_info "正在自动修复配置..."
        sed -i 's|./frontend/build:|./frontend/dist:|g' docker-compose.yml
        log_success "配置已自动修复"
    fi
    
    # 验证配置正确性
    if ! grep -q "./frontend/dist:" docker-compose.yml; then
        log_error "Docker Compose 配置验证失败"
        exit 1
    fi
    
    log_success "配置验证通过"
}

# 构建和启动服务
deploy_services() {
    log_info "停止现有服务..."
    docker compose down
    
    log_info "构建并启动服务..."
    docker compose up --build -d
    
    # 等待服务启动
    log_info "等待服务启动..."
    sleep 10
    
    # 验证服务状态
    log_info "验证服务状态..."
    if ! docker compose ps | grep -q "Up"; then
        log_error "服务启动失败"
        docker compose logs
        exit 1
    fi
    
    log_success "服务启动成功"
}

# 验证部署结果
verify_deployment() {
    log_info "验证部署结果..."
    
    # 检查前端是否包含最新代码
    log_info "验证前端代码更新..."
    if docker compose exec frontend grep -r "查看日志" /usr/share/nginx/html/ &> /dev/null; then
        log_success "前端代码验证通过：包含最新的日志功能"
    else
        log_error "前端代码验证失败：未包含最新功能"
        exit 1
    fi
    
    # 检查服务可访问性
    log_info "验证服务可访问性..."
    
    # 检查前端
    if curl -f http://localhost:3000 &> /dev/null; then
        log_success "前端服务可访问 (http://localhost:3000)"
    else
        log_warning "前端服务不可访问"
    fi
    
    # 检查管理API
    if curl -f http://localhost:5001/api/v1/tools/ &> /dev/null; then
        log_success "管理API可访问 (http://localhost:5001)"
    else
        log_warning "管理API不可访问"
    fi
    
    # 检查MCP服务
    if curl -f http://localhost:5050/logs &> /dev/null; then
        log_success "MCP服务可访问 (http://localhost:5050)"
    else
        log_warning "MCP服务不可访问"
    fi
}

# 显示部署信息
show_deployment_info() {
    log_success "🎉 MCP-Link 部署完成！"
    echo
    echo "📋 服务访问地址："
    echo "  • 前端管理界面: http://localhost:3000"
    echo "  • 管理API:      http://localhost:5001"
    echo "  • MCP服务:      http://localhost:5050"
    echo "  • 日志API:      http://localhost:5050/logs"
    echo
    echo "🔧 常用命令："
    echo "  • 查看服务状态: docker compose ps"
    echo "  • 查看日志:     docker compose logs"
    echo "  • 停止服务:     docker compose down"
    echo "  • 重启服务:     docker compose restart"
    echo
    echo "📊 功能特性："
    echo "  ✅ 调用透明化日志系统"
    echo "  ✅ 前端日志查看功能"
    echo "  ✅ 敏感信息自动脱敏"
    echo "  ✅ 性能优化索引查询"
    echo "  ✅ 安全配置和速率限制"
}

# 主函数
main() {
    log_info "🚀 开始 MCP-Link 统一部署流程..."
    
    check_prerequisites
    clean_build
    build_frontend
    validate_config
    deploy_services
    verify_deployment
    show_deployment_info
    
    log_success "✨ 部署流程全部完成！"
}

# 脚本入口
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi